from gold import gold_prices  # 确保这里导入的是正确的金价字典
from  gold import gold_prices
'''
5.黄金交易模拟赛
你正在参加黄金交易模拟赛，假定只在一年的某个时间段进行定投，请根据上一个实验的金价数据与交易规则，
编写程序计算如何投资（何日买入，何日卖出）能实现累计收益最大化，输出最佳方案的买入起始日期和卖出日期。
时间区间的收益统计，要求自定义CalcGain()函数实现。
'''
def CalcGain(buy_date, sell_date, gold_prices):
    """
    计算从buy_date到sell_date之间的累计收益。
    """
    buy_price = gold_prices.get(buy_date, 0)
    sell_price = gold_prices.get(sell_date, 0)
    if buy_price == 0 or sell_price == 0:
        return 0  # 如果某天没有金价数据，则收益为0
    return sell_price - buy_price

def find_best_trading_days(gold_prices, start_date, end_date):
    """
    找出最佳买入和卖出日期以最大化收益。
    """
    max_gain = 0
    best_buy_date = None
    best_sell_date = None

    # 遍历所有可能的买入日期
    for buy_date in gold_prices.keys():
        if buy_date < start_date or buy_date >= end_date:
            continue  # 排除不在时间区间内的日期

        # 遍历所有可能的卖出日期
        for sell_date in gold_prices.keys():
            if sell_date <= buy_date or sell_date >= end_date:
                continue  # 卖出日期必须在买入日期之后且在时间区间内

            gain = CalcGain(buy_date, sell_date, gold_prices)
            if gain > max_gain:
                max_gain = gain
                best_buy_date = buy_date
                best_sell_date = sell_date

    return best_buy_date, best_sell_date, max_gain

# 示例金价数据，实际中应从文件或数据库等地方获取

# 时间区间，例如从2016年1月1日到2016年12月31日
start_date = "2016-01-01"
end_date = "2016-02-15"

# 找出最佳交易日期
best_buy, best_sell, max_profit = find_best_trading_days(gold_prices, start_date, end_date)
print(f"最佳买入日期: {best_buy}")
print(f"最佳卖出日期: {best_sell}")
print(f"最大累计收益: {max_profit}元")